// -----------------------------
// Author: 		Dhaenens Gert 
// Creation: 	2/12/2015 10:14:41 PM				
// -----------------------------

#ifndef _PlatformProvider_h
#define _PlatformProvider_h

#include "Common.h"

namespace Flow
{

	struct PlatformData;

	class PlatformProvider
	{
	public:

		static Bool				LoadPlatformLibrary();
		static void				UnloadPlatformLibrary();

		template<typename T>
		static T*				QueryInterface(Char* lpObjectType);

	private:

		PlatformProvider();
		~PlatformProvider();

		static void*			RequestFunction(Char* lpObjectIdentifier);

		static PlatformData*	s_lpPlatformData;

		PlatformProvider(const PlatformProvider& refPlatformProvider);
		PlatformProvider& operator=(const PlatformProvider& refPlatformProvider);
	};

}

#include "PlatformProvider.inl"
#endif